#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
const int N=2e5+10;
int h[N],ne[N*2],e[2*N],idx;
int w[N*2];
int ans=0;
int st[N];
void add(int a,int b,int c)
{
	
	e[idx]=b;
	w[idx]=c;
	ne[idx]=h[a];
	h[a]=idx;
	idx++;
}

void dfs(int u, int d ,int p)
{
	for(int i=h[u];i!=-1;i=ne[i])
	{
		int j=e[i];
		if(!st[j])
		{
			st[j]=1;
			if(p<w[i])
		    dfs(j,d,w[i]);
		    else
		    {
		    	dfs(j,d+1,w[i]);
			}
	    }
	}
	ans=max(ans,d);
	return;
}
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		ans=0;
		idx=0;
		int n;
		scanf("%d",&n);
		for(int i=1;i<=n;i++) 
		{
		    h[i]=-1;
		    st[i]=0;
		}
		
		int a,b,c=1;
		for(int i=1;i<n;i++)
		{
			cin>>a>>b;
			add(a,b,c);
			add(b,a,c);
			c++;
		}
//		for(int i=h[1];i!=-1;i=ne[i])
//		{
//			cout<<e[i]<<' ';
//		}
        st[1]=1;
		for(int i=h[1];i!=-1;i=ne[i])
		{
			int j=e[i];
			if(!st[j])
			{
				st[j]=1;
				dfs(j,1,w[i]);
			}
		}
		cout<<ans<<endl;
	}

	return 0;
}

